-- This MIB provides an extension to the CISCO-HSRP-MIB which defines Cisco's
-- "proprietary Hot Standby Routing Protocol (HSRP), defined in RFC2281. The
-- extensions cover assigning of secondary HSRP ip addresses, modifying an 
-- HSRP Group's priority by tracking the operational status of interfaces,
-- etc. 

-- Terminology:
-- HSRP is a protocol used amoung a group of routers for the purpose of 
-- selecting an "active router" and a "standby router". 

-- An "active router" is the router of choice for routing packets.

-- A "standby router" is a router that takes over the routing duties
-- when an active router fails, or when preset conditions have been met.

-- An "HSRP group" or a "standby group" is a set of routers which communicate 
-- using HSRP. An HSRP group has a group MAC address and a group IP address.
-- These are the designated addresses. The active router assumes  
-- (i.e. inherits) these group addresses.

-- BIA stands for Burned In Address.

CISCO-HSRP-EXT-MIB DEFINITIONS ::= BEGIN

IMPORTS
        MODULE-IDENTITY, OBJECT-TYPE,
        IpAddress
                FROM SNMPv2-SMI
        Unsigned32
                FROM CISCO-TC
        TruthValue, RowStatus 
                FROM SNMPv2-TC
        MODULE-COMPLIANCE,
        OBJECT-GROUP
                FROM SNMPv2-CONF
        ifIndex, InterfaceIndex
               FROM IF-MIB
        cHsrpGrpNumber
               FROM CISCO-HSRP-MIB
        ciscoMgmt
                FROM CISCO-SMI;

ciscoHsrpExtMIB MODULE-IDENTITY
        LAST-UPDATED    "9808030000Z"
        ORGANIZATION    "Cisco Systems, Inc."
        CONTACT-INFO
                "       Cisco Systems
                        Customer Service

                Postal: 170 W Tasman Drive
                        San Jose, CA  95134
                        USA

                   Tel: +1 800 553-NETS

                E-mail: cs-hsrp@cisco.com"
        DESCRIPTION
                "The Extension MIB module for the CISCO-HSRP-MIB which is
                 based on RFC2281."
        ::= { ciscoMgmt 107 }

ciscoHsrpExtMIBObjects OBJECT IDENTIFIER ::= { ciscoHsrpExtMIB 1 }
-- HSRP Extension Tables
-- Extention group info
cHsrpExtGroup OBJECT IDENTIFIER ::= { ciscoHsrpExtMIBObjects 1 }
-- Interface Use Burned-In Address state
cHsrpExtIfBIA OBJECT IDENTIFIER ::= { ciscoHsrpExtMIBObjects 2 }

cHsrpExtIfTrackedTable OBJECT-TYPE
        SYNTAX     SEQUENCE OF CHsrpExtIfTrackedEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                 "A table containing information about tracked interfaces per 
                  HSRP group."
        ::= { cHsrpExtGroup 1 }

cHsrpExtIfTrackedEntry OBJECT-TYPE
        SYNTAX     CHsrpExtIfTrackedEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "The cHsrpExtIfTrackedEntry allows an HSRP group 
                interface to track one or more interfaces. Weight(priority)
                is given to each and every interface tracked. When a tracked 
                interface is unavailable, the HSRP priority of the router is 
                decreased. i.e cHsrpGrpPriority value assigned to an HSRP 
                group will reduce by the value assigned to
                cHsrpExtIfTrackedPriority. This reduces the likelihood 
                of a router with a failed key interface becoming the 
                active router.
                 
                Setting cHsrpExtIfTrackedRowStatus to active starts
                the tracking of cHsrpExtIfTracked by the HSRP group. 
                The value of cHsrpExtIfTrackedRowStatus may be set 
                to destroy at any time.

                Entries may not be created via SNMP without explicitly setting
                cHsrpExtIfTrackedRowStatus to either 'createAndGo' 
                or 'createAndWait'.

                Entries can be created and modified via the management
                protocol or by the device's local management interface.

                If the row is not active, and a local management interface
                command modifies that row, the row may transition to active
                state.

                A row entry in the cHsrpExtIfTrackedTable can not be created
                unless the corresponding row in the cHsrpGrpTable has been 
                created. If that corresponding row in cHsrpGrpTable is 
                deleted, the interfaces it tracks also get deleted.

                A row which is not in active state will timeout after a
                configurable period (five minutes by default). This timeout
                period can be changed by setting cHsrpConfigTimeout."
        INDEX { ifIndex, cHsrpGrpNumber, cHsrpExtIfTracked }
        ::= { cHsrpExtIfTrackedTable 1 }

CHsrpExtIfTrackedEntry ::=
        SEQUENCE {
                -- interface which is getting tracked
                cHsrpExtIfTracked               InterfaceIndex,
                -- Priority 
                cHsrpExtIfTrackedPriority       Unsigned32,
                cHsrpExtIfTrackedRowStatus      RowStatus
        }

cHsrpExtIfTracked OBJECT-TYPE
        SYNTAX     InterfaceIndex
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                  "Index into the cHsrpExtIfTrackedTable for the
                  corresponding { ifIndex, cHsrpGrpNumber } pair i.e for an
                  HSRP group. This is the ifIndex of the tracked interface."
        ::= { cHsrpExtIfTrackedEntry 1 }

cHsrpExtIfTrackedPriority OBJECT-TYPE
        SYNTAX     Unsigned32 (0..255)
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "Priority of the tracked interface for the corresponding
                { ifIndex, cHsrpGrpNumber } pair. In the range of 0 to 255, 0
                is the lowest priority and 255 is the highest. When a tracked 
                interface is unavailable, the cHsrpGrpPriority of the router 
                is decreased by the value of this object instance (If the 
                cHsrpGrpPriority is less than the 
                cHsrpExtIfTrackedPriority, then the HSRP priority 
                becomes 0). This allows a standby router to be configured 
                with a priority such that if the currently active router's 
                priority is lowered because the tracked interface goes down, 
                the standby router can takeover." 
        DEFVAL { 0 }
        ::= { cHsrpExtIfTrackedEntry 2 }

cHsrpExtIfTrackedRowStatus OBJECT-TYPE
        SYNTAX     RowStatus
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "The control that allows modification, creation, and deletion
                 of entries. For detailed rules see the DESCRIPTION for
                 cHsrpExtIfTrackedEntry."
        ::= { cHsrpExtIfTrackedEntry 3 }

cHsrpExtSecAddrTable OBJECT-TYPE
        SYNTAX     SEQUENCE OF CHsrpExtSecAddrEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "A table containing information about secondary HSRP IP 
                Addresses per interface and group."
        ::= { cHsrpExtGroup 2 }

cHsrpExtSecAddrEntry OBJECT-TYPE
        SYNTAX     CHsrpExtSecAddrEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "The CHsrpExtSecAddrEntry allows creation of secondary 
                IP Addresses for each cHsrpGrpEntry row.

                Secondary addresses can be added by setting 
                cHsrpExtSecAddrRowStatus to be active. The value of
                cHsrpExtSecAddrRowStatus may be set to destroy at any
                time.

                Entries may not be created via SNMP without explicitly setting
                cHsrpExtSecAddrRowStatus to either 'createAndGo'
                or 'createAndWait'.

                Entries can be created and modified via the management
                protocol or by the device's local management interface.
 
                If the row is not active, and a local management interface
                command modifies that row, the row may transition to active
                state.

                A row which is not in active state will timeout after a
                configurable period (five minutes by default). This timeout
                period can be changed by setting cHsrpConfigTimeout.

                Before creation of a cHsrpExtSecAddrEntry row,
                either cHsrpGrpConfiguredVirtualIpAddr or 
                cHsrpGrpLearnedVirtualIpAddr must have a valid IP Address.
                This is because a secondary ip address cannot be created
                unless the primary ip address has already been set.

                To create a new cHsrpExtSecAddrEntry row, a management 
                station should choose the ifIndex of the interface which is to 
                be added as part of an HSRP group. Also, an HSRP group number 
                and a cHsrpExtSecAddrAddress should be chosen.

                Deleting a {ifIndex, cHsrpGrpNumber} row in the
                cHsrpGrpTable will delete all corresponding
                rows in the cHsrpExtSecAddrTable.
                Deleting a primary address value in the cHsrpGrpEntry row
                will delete all secondary addresses for the same
                {ifIndex, cHsrpGrpNumber} pair."

        INDEX { ifIndex, cHsrpGrpNumber, cHsrpExtSecAddrAddress }
        ::= { cHsrpExtSecAddrTable 1 }

CHsrpExtSecAddrEntry ::=
        SEQUENCE {
                cHsrpExtSecAddrAddress          IpAddress,
                cHsrpExtSecAddrRowStatus        RowStatus
        }

cHsrpExtSecAddrAddress OBJECT-TYPE
       SYNTAX     IpAddress
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
              "A secondary IpAddress for the {ifIndex, cHsrpGrpNumber} pair.
               As explained in the DESCRIPTION for cHsrpExtSecAddrEntry, a
               primary address must exist before a secondary address for 
               the same {ifIndex, cHsrpGrpNumber} pair can be created."
       ::= { cHsrpExtSecAddrEntry 1 }

cHsrpExtSecAddrRowStatus OBJECT-TYPE
        SYNTAX     RowStatus
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                "The control that allows modification, creation, and deletion
                 of entries. For detailed rules see the DESCRIPTION for
                 cHsrpExtSecAddrEntry."
        ::= { cHsrpExtSecAddrEntry 2 }

cHsrpExtIfTable OBJECT-TYPE
        SYNTAX     SEQUENCE OF CHsrpExtIfEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "HSRP-specific configurations for each physical interface."
        ::= { cHsrpExtIfBIA 1 }

cHsrpExtIfEntry OBJECT-TYPE
        SYNTAX     CHsrpExtIfEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
                "If HSRP entries on this interface must use the BIA (Burned
                In Address), there must be an entry for the interface in this 
                table. Entries of this table are only accessible if HSRP has 
                been enabled i.e entries can not be created if HSRP is not
                enabled. Also, the interfaces should be of IEEE 802 ones
                (Ethernet, Token Ring, FDDI,VLAN, LANE, TR-LANE).

                Setting cHsrpExtIfRowStatus to active initiates the
                entry with default value for cHsrpExtIfUseBIA as FALSE.
                The value of cHsrpExtIfRowStatus may be set to destroy
                at any time. If the row is not initiated, it is similar to
                having cHsrpExtIfUseBIA as FALSE.

                Entries may not be created via SNMP without explicitly setting
                cHsrpExtIfRowStatus to either 'createAndGo' or 'createAndWait'.

                Entries can be created and modified via the management
                protocol or by the device's local management interface.

                If the row is not active, and a local management interface
                command modifies that row, the row may transition to active
                state.

                A row which is not in active state will timeout after a
                configurable period (five minutes by default). This timeout
                period can be changed by setting cHsrpConfigTimeout."
        INDEX { ifIndex }
        ::= { cHsrpExtIfTable 1 }

CHsrpExtIfEntry ::=
        SEQUENCE {
                cHsrpExtIfUseBIA                TruthValue,
                cHsrpExtIfRowStatus             RowStatus
        }

cHsrpExtIfUseBIA OBJECT-TYPE
        SYNTAX     TruthValue
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
               "If set to TRUE, the HSRP Group MAC Address for all groups
                on this  interface will be the burned-in-address. Otherwise,
                this will be determined by ciscoHsrpGroupNumber. In case of
                sub-interfaces, UseBIA applies to all sub-interfaces on an 
                interface and to all groups on those sub-interfaces."
        DEFVAL { false }
        ::= { cHsrpExtIfEntry 1 }

cHsrpExtIfRowStatus OBJECT-TYPE
        SYNTAX     RowStatus
        MAX-ACCESS read-create
        STATUS     current
        DESCRIPTION
                 "The control that allows modification, creation, and deletion
                 of entries. For detailed rules see the DESCRIPTION for
                 cHsrpExtIfEntry." 
        ::= { cHsrpExtIfEntry 2 }

-- Notifications
-- None

-- Conformance groups

cHsrpExtConformance OBJECT IDENTIFIER ::= { ciscoHsrpExtMIB 3 }
cHsrpExtCompliances OBJECT IDENTIFIER ::= { cHsrpExtConformance 1 }
cHsrpExtComplianceGroups OBJECT IDENTIFIER ::= { cHsrpExtConformance 2 }

-- compliance statements

cHsrpExtCompliance MODULE-COMPLIANCE
        STATUS current
        DESCRIPTION
                "the compliance statement for entities which implement
                the CISCO-HSRP-EXT-MIB."
        MODULE -- this module
                MANDATORY-GROUPS {
                        cHsrpExtIfTrackedGroup,
                        cHsrpExtSecAddrGroup,
                        cHsrpExtIfGroup
                }
        ::= { cHsrpExtCompliances 1 }


cHsrpExtIfTrackedGroup OBJECT-GROUP
        OBJECTS {
                  cHsrpExtIfTrackedPriority,
                  cHsrpExtIfTrackedRowStatus
                }
        STATUS current
        DESCRIPTION
                "The collection of objects used to add, delete and retrieve
                the interfaces getting tracked for HSRP groups."
        ::= { cHsrpExtComplianceGroups 1 }

cHsrpExtSecAddrGroup OBJECT-GROUP
        OBJECTS {
                  cHsrpExtSecAddrRowStatus
                }
        STATUS current
        DESCRIPTION
                "The collection of objects used to add, delete and retrieve
                primary and secondary Ip Addresses for HSRP groups."
        ::= { cHsrpExtComplianceGroups 2 }

cHsrpExtIfGroup OBJECT-GROUP
        OBJECTS {
                   cHsrpExtIfUseBIA, 
                   cHsrpExtIfRowStatus 
                }
        STATUS current
        DESCRIPTION
                 "Object which tells if HSRP entries on this interface must
                 use BIA or not."
        ::= { cHsrpExtComplianceGroups 3 }

END